package evemanutool.data.cache; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import evemanutool.constants.DBConstants; import evemanutool.utils.file.Parsable; import evemanutool.utils.file.ParseTools; public class TradeEntry implements Parsable<TradeEntry>, Comparable<TradeEntry>, DBConstants { //Date. private Date date; //Values. public enum HistoryType {LOW,AVG,HIGH,VOLUME,ORDERS} private final HashMap<HistoryType, Double> hL = new HashMap<>(); public TradeEntry() {} public TradeEntry(Date date, double lowPrice, double avgPrice, double highPrice, double volume, double orders) { setDate(date); setLowPrice(lowPrice); setAvgPrice(avgPrice); setHighPrice(highPrice); setVolume(volume); setOrders(orders); } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public double getValue(HistoryType key) { return hL.get(key); } public double getLowPrice() { return hL.get(HistoryType.LOW); } public void setLowPrice(double lowPrice) { hL.put(HistoryType.LOW, lowPrice); } public double getAvgPrice() { return hL.get(HistoryType.AVG); } public void setAvgPrice(double avgPrice) { hL.put(HistoryType.AVG, avgPrice); } public double getHighPrice() { return hL.get(HistoryType.HIGH); } public void setHighPrice(double highPrice) { hL.put(HistoryType.HIGH, highPrice); } public double getVolume() { return hL.get(HistoryType.VOLUME); } public void setVolume(double volume) { hL.put(HistoryType.VOLUME, volume); } public double getOrders() { return hL.get(HistoryType.ORDERS); } public void setOrders(double orders) { hL.put(HistoryType.ORDERS, orders); } @Override public boolean equals(Object obj) { if (obj instanceof TradeEntry) { return getDate().getTime() == ((TradeEntry) obj).getDate().getTime(); } return false; } @Override public int hashCode() { return (int) getDate().getTime(); } @Override public int compareTo(TradeEntry o) { //Negate standard sort order => Latest first. return -Long.compare(getDate().getTime(), o.getDate().getTime()); } @Override public String toParseString() { ArrayList<Object> ss = new ArrayList<>(); ss.add(getDate().getTime()); ss.add(getLowPrice()); ss.add(getAvgPrice()); ss.add(getHighPrice()); ss.add(getVolume()); ss.add(getOrders()); return ParseTools.join(ss, LEVEL4_DELIM); } @Override public TradeEntry fromParseString(String s) { String[] ss = s.split(LEVEL4_DELIM, -1); setDate(new Date(Long.parseLong(ss[0]))); setLowPrice(Double.parseDouble(ss[1])); setAvgPrice(Double.parseDouble(ss[2])); setHighPrice(Double.parseDouble(ss[3])); setVolume(Double.parseDouble(ss[4])); setOrders(Double.parseDouble(ss[5])); return this; } }